#pragma once
#include "Header.h"
#include "Auxiliary.h"
#include "Test.h"

BOOL IsWow64();

void* Memcpy64(IN LongPtr64 dest, IN LongPtr64 src, IN size_t size);

LongPtr64 GetTeb64();

LongPtr64 GetPeb64();

LongPtr64 GetModuleHandle64(IN PCWCHAR lpModuleName);

LongPtr64 GetNtdll64();

LongPtr64 GetLdrGetProcedureAddress();

NTSTATUS X64Call(IN DWORD64 lpFunctionAddress, IN DWORD32 argc, ...);

LongPtr64 GetProcAddress64(IN LongPtr64 lpModule, IN const char* lpFunctionName);

DWORD64 VirtualAllocEx64(
    IN HANDLE hProcess,
    IN DWORD64 lpAddress,
    IN SIZE_T dwSize,
    IN DWORD flAllocationType,
    IN DWORD flProtect
);

BOOL VirtualFreeEx64(IN HANDLE hProcess, IN DWORD64 lpAddress, IN SIZE_T dwSize, IN DWORD dwFreeType);

BOOL WriteProcessMemory64(
    IN HANDLE hProcess,
    IN DWORD64 lpBaseAddress,
    IN LPVOID lpBuffer,
    IN SIZE_T nSize,
    IN SIZE_T* lpNumberOfBytesWritten
);

BOOL ReadProcessMemory64(
    IN HANDLE hProcess,
    IN DWORD64 lpBaseAddress,
    IN LPVOID lpBuffer,
    IN SIZE_T nSize,
    IN SIZE_T* lpNumberOfBytesRead
);

